package com.tennis.tennisreservation.service;

import com.tennis.tennisreservation.entity.Coupon;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 红包服务接口
 * 定义红包相关业务逻辑
 */
public interface CouponService {
    
    /**
     * 创建红包
     * @param coupon 红包信息
     * @return 创建的红包
     */
    Coupon createCoupon(Coupon coupon);
    
    /**
     * 批量创建红包（发放给用户）
     * @param userId 用户ID
     * @param amount 红包金额
     * @param validDays 有效天数
     * @param count 创建数量
     * @return 创建的红包列表
     */
    List<Coupon> createCouponBatch(Long userId, BigDecimal amount, int validDays, int count);
    
    /**
     * 获取红包详情
     * @param id 红包ID
     * @return 红包详情
     */
    Coupon getCouponById(Long id);
    
    /**
     * 查询用户的红包
     * @param userId 用户ID
     * @return 红包列表
     */
    List<Coupon> getCouponsByUserId(Long userId);
    
    /**
     * 分页查询红包
     * @param page 页码
     * @param size 每页大小
     * @param userId 用户ID（可选）
     * @param status 状态（可选）
     * @return 分页数据
     */
    Map<String, Object> getCouponList(int page, int size, Long userId, String status);
    
    /**
     * 使用红包
     * @param id 红包ID
     * @return 更新后的红包
     */
    Coupon useCoupon(Long id);
    
    /**
     * 取消红包（作废）
     * @param id 红包ID
     * @return 是否成功
     */
    boolean cancelCoupon(Long id);
    
    /**
     * 检查并更新过期红包
     * 将已过期未使用的红包标记为已过期
     * @return 更新的红包数量
     */
    int checkAndUpdateExpiredCoupons();
    
    /**
     * 查询用户有效的红包
     * @param userId 用户ID
     * @return 有效红包列表
     */
    List<Coupon> getValidCoupons(Long userId);
} 